#include "read_boy_confg.h"
#include "read_boy_book.h"


extern const uint8_t english[];
const uint8_t daxue[] ;



read_boy_book_t my_read_boy_book;



void my_read_boy_book_totle_init(){
    my_read_boy_book.totle = strlen(my_read_boy_book.book);
}

void my_read_boy_book_init(){
    my_read_boy_book.lseek = 0;
    my_read_boy_book.book_end_flag = 0;
    
    
    my_read_boy_book.iX_initial_value = 10;
    my_read_boy_book.iY_initial_value = 300 -30 -30;
    
    my_read_boy_book.hight = FB_HEIGHT - my_read_boy_book.iY_initial_value;  //FB_HEIGHT - my_read_boy_book.iY_initial_value-10;//FB_HEIGHT;//300;//FB_HEIGHT - my_read_boy_book.iY_initial_value;//190;//FB_HEIGHT;
    my_read_boy_book.width = FB_WIDTH- 10- my_read_boy_book.iX_initial_value; //FB_WIDTH-100 - 10 - my_read_boy_book.iX_initial_value-10;//FB_WIDTH - 10;//300;//FB_WIDTH - 10 - my_read_boy_book.iX_initial_value;//170;//FB_WIDTH - 10;
    
    my_read_boy_book.iX = my_read_boy_book.iX_initial_value;
    my_read_boy_book.iY = my_read_boy_book.iY_initial_value;
    
    my_read_boy_book.line = 0;
    my_read_boy_book.char_num = 0;
    
    my_read_boy_book.EN_font = read_boy_FONT_16x24;
    my_read_boy_book.CN_font = read_boy_FONT_24x24;
    
    my_read_boy_book.en_font_x = 16;
    my_read_boy_book.en_font_y = 24;//==============================
    my_read_boy_book.cn_font_x = 24;
    my_read_boy_book.cn_font_y = 24;//==============================
    my_read_boy_book.line_hight = 24;
    
    //===================
    my_read_boy_book.old_index = 0;
    my_read_boy_book.new_index = 0;
    
    my_read_boy_book.book = daxue;//daxue;//english;
    my_read_boy_book_totle_init();
    
    //read_boy_book_set_en_font(read_boy_FONT_6x8);
    //read_boy_book_set_cn_font(read_boy_FONT_16x16);
    
    //==========================================================
    my_read_boy_book.sd_current_book_num = 3;    
    read_boy_book_total_num_init();
    
}

void read_boy_book_set_en_font(read_boy_font_t  font){
    
    my_read_boy_book.EN_font = font;
    if(font == read_boy_FONT_16x24){
        my_read_boy_book.en_font_x = 16;
        my_read_boy_book.en_font_y = 24;
    }else if(font == read_boy_FONT_6x8){
        my_read_boy_book.en_font_x = 6;
        my_read_boy_book.en_font_y = 8;
    }
    if(my_read_boy_book.en_font_y > my_read_boy_book.cn_font_y){
        my_read_boy_book.line_hight = my_read_boy_book.en_font_y;
    }else{
        my_read_boy_book.line_hight = my_read_boy_book.cn_font_y;
    }
}

void read_boy_book_set_cn_font(read_boy_font_t  font){
    my_read_boy_book.CN_font = font;
    if(font == read_boy_FONT_16x16){
        my_read_boy_book.cn_font_x = 16;
        my_read_boy_book.cn_font_y = 16;
        //my_read_boy_book.line_hight = 16;
    }else if(font == read_boy_FONT_24x24){
        my_read_boy_book.cn_font_x = 24;
        my_read_boy_book.cn_font_y = 24;
        //my_read_boy_book.line_hight = 24;
    }
    if(my_read_boy_book.en_font_y > my_read_boy_book.cn_font_y){
        my_read_boy_book.line_hight = my_read_boy_book.en_font_y;
    }else{
        my_read_boy_book.line_hight = my_read_boy_book.cn_font_y;
    }
}

void read_boy_book_show_one_page(){
    //uint16_t len = 0;
    uint8_t *str = &my_read_boy_book.book[my_read_boy_book.lseek];
    while(1){//line
        while(1){//column;//列
            if(*str < 0x80){//en
                if((my_read_boy_book.iX - my_read_boy_book.iX_initial_value) >= (my_read_boy_book.width - my_read_boy_book.en_font_x)){
                    break;
                }
                read_boy_draw_char_en(my_read_boy_book.iX,my_read_boy_book.iY,my_read_boy_book.EN_font, *str,0);
                str++;
                my_read_boy_book.char_num++;
                my_read_boy_book.iX += my_read_boy_book.en_font_x;
            }else{
                if((my_read_boy_book.iX - my_read_boy_book.iX_initial_value) >= (my_read_boy_book.width - my_read_boy_book.cn_font_x)){
                    break;
                }
                //read_boy_draw_char_CN(my_read_boy_book.iX,my_read_boy_book.iY , my_read_boy_book.CN_font,str);//======================
                char hz[3];
                 hz[0] = str[0];
                hz[1] = str[1];
                hz[2] = 0;
                
                draw_string_for_sd(my_read_boy_book.iX,my_read_boy_book.iY,24,hz);
                str+=2;
                my_read_boy_book.char_num+=2;
                my_read_boy_book.iX += my_read_boy_book.cn_font_x;
            }
            
        }
        my_read_boy_book.line++;
        my_read_boy_book.iY += my_read_boy_book.line_hight;
        my_read_boy_book.iX = my_read_boy_book.iX_initial_value;//============================
        if((my_read_boy_book.iY - my_read_boy_book.iY_initial_value) >  (my_read_boy_book.hight - my_read_boy_book.line_hight)){
            my_read_boy_book.iY = my_read_boy_book.iY_initial_value;//================================
            my_read_boy_book.line = 0;
            break;
        }        
    
    }
    do{
        uint16_t percentage;
        read_boy_fb_fillRect(my_read_boy_book.iX_initial_value + my_read_boy_book.width + 2,
                             my_read_boy_book.iY_initial_value,  3,my_read_boy_book.hight - 3);
        percentage  = my_read_boy_book.lseek  * my_read_boy_book.hight /my_read_boy_book.totle;
        
        read_boy_fb_fillRect(my_read_boy_book.iX_initial_value + my_read_boy_book.width + 0,
                             my_read_boy_book.iY_initial_value + percentage,  7, 3);
    
    }while(0);

}

void readboy_book_full_disp_or_part(){
    static char num = 0;
    if(num == 9){
        my_drv_base.drv_fullpart(0);
    }else if(num > 9){
        num = 0;
        my_drv_base.drv_fullpart(1);
    }
    my_drv_base.drv_dispWriter(&read_boy_fb_read_one_byte,my_drv_base._quality);
    num++;
}

//#define READ_BOY_BOOK_DISP              my_drv_base.drv_dispWriter(&read_boy_fb_read_one_byte,my_drv_base._quality)

//==========================================================




void read_boy_book_total_num_init(){
    FIL file;  // 文件对象
    FRESULT res;  // FatFs返回结果
    FILINFO fno;  // 文件信息结构体
    
    res = f_open(&file,  BOOK_PATH_NEWFILE_TXT, FA_READ);
    if (res == FR_OK) {
        // 获取文件状态
        res = f_stat(BOOK_PATH_NEWFILE_TXT, &fno);
        if (res == FR_OK) {
            // 如果成功，将文件大小存储在提供的指针中
            //size = fno.fsize;
            //num = fno.fsize / 128;
            //my_book.book_num = fno.fsize / 128;
            my_read_boy_book.sd_book_total_count = fno.fsize / 128;
        }
        f_close(&file) ;  
    }
}

FRESULT delete_file(const TCHAR* path) {
    FRESULT res; // 定义Fatfs操作结果变量

    // 删除文件
    res = f_unlink(path);
    if (res != FR_OK) {
        return res; // 如果删除失败，返回错误码
    }

    return FR_OK; // 返回操作成功
}

void read_boy_book_init_set_Table_of_Contents2(){//更新电子书目录
    
    FRESULT res;  // FatFs返回结果
    DIR dir;      // 目录对象
    FILINFO fno;  // 文件信息结构体
    
    FIL file;  // 文件对象
    UINT bw;
    
    //char temp_buff[20][128];
    char temp_buff[11][128];
    char i = 0;
    
    res = f_open(&file,  BOOK_PATH_NEWFILE_TXT, FA_READ);
    if (res == FR_OK) { 
        f_close(&file); 
        //delete_file(BOOK_PATH_NEWFILE_TXT);
        // 删除文件
        res = f_unlink(BOOK_PATH_NEWFILE_TXT);
        if (res != FR_OK) {
            //return res; // 如果删除失败，返回错误码
        }
        
    }
    
    // 尝试打开目录
    res = f_opendir(&dir,  BOOK_PATH_FOLDER);
    if (res != FR_OK) {
        //printf("打开目录失败，错误码：%d\n", res);
        return;
    }
    
    // 循环读取目录项
    while (1) {
        res = f_readdir(&dir, &fno);  // 读取一个目录项
        if (res != FR_OK || fno.fname[0] == 0) break;  // 出错或到达目录尾部时退出循环
        if (fno.fattrib & AM_DIR) {
            // 这是一个目录
            //draw_string(0,0,16,fno.fname);
        }else{
            // 这是一个文件，尝试打开
            
            
            strcpy(&temp_buff[i][0],fno.fname);
            i++;
        }

    }
    f_closedir(&dir);  // 关闭目录
    
    
    // 以写入模式打开文件，如果不存在则创建
    if (f_open(&file, BOOK_PATH_NEWFILE_TXT, FA_CREATE_ALWAYS | FA_WRITE) != FR_OK) {
        //error("File open failed");
        return;
    }
    
   
    for(int j = 0; j < i; j++){
        res = f_lseek(&file, j*128);
        if (res == FR_OK) {
            //const char *data = "追加的数据\n";
            res = f_write(&file, &temp_buff[j][0], 128, &bw); // 写入数据
            f_sync(&file); // 刷新数据
        }
    }
    // 关闭文件
    if (f_close(&file) != FR_OK) {
        //error("File close failed");
        return;
    }
    
    //=========================
    char out_buff[128];
    uint32_t rd_len;
    res = f_open(&file,  BOOK_PATH_NEWFILE_TXT, FA_READ);
    if (res == FR_OK) {
        //printf("成功打开文件：%s\n", fno.fname);
        // 这里可以进行文件操作，例如读取内容等
        for(int j = 0; j < i; j++){
            res = f_lseek(&file, j*128);
            if (res == FR_OK) {
                res = f_read(&file, out_buff, 128, &rd_len);
                //draw_string(0,16,16,out_buff);
            }
        }
        
        f_close(&file) ;

    }
    read_boy_book_total_num_init();
   
}





//==============================================================================


//=================================================================================



char key_scan_auto(){
    static char flag = 0;
    static int delay = 0;
    switch(flag){
        case 0:
            delay = 0;
            flag = 1;
        break;
        case 1:
            DelayMs(10);	
            delay++;
            if(delay > 200){
                delay = 0;
                flag = 0;
                return 1;
            }
        break;
            
    }
    return 0;
}

void read_boy_book_check(char key_num){ //选择界面
    static char flag = 0;
    switch(flag){
        case 0:
            READ_BOY_BOOK_FULL_PART(1);
            READ_BOY_BOOK_SET_DEPTH(15);
            READ_BOY_BOOK_DISP_CLEAR; 
            my_read_boy_book.new_index = 0;
            my_read_boy_book.old_index = 0;
            flag = 1;
        //break;
        case 1:
            draw_string_for_sd_start();            
            //        //read_boy_book_show_one_page_on_sd();
            draw_string_for_sd(my_read_boy_book.iX_initial_value +30 ,my_read_boy_book.iY_initial_value,24,"电子书");
            draw_string_for_sd(my_read_boy_book.iX_initial_value +30,my_read_boy_book.iY_initial_value+ 30,24,"设置");
            //my_read_boy_book.old_index = 0;
            //my_read_boy_book.new_index = 0;
            read_boy_draw_char_en(my_read_boy_book.iX_initial_value,my_read_boy_book.iY_initial_value + my_read_boy_book.old_index*30,read_boy_FONT_16x24, '>',0xff);
            read_boy_draw_char_en(my_read_boy_book.iX_initial_value,my_read_boy_book.iY_initial_value + my_read_boy_book.new_index*30,read_boy_FONT_16x24, '>',0);
            READ_BOY_BOOK_DISP;
            
            draw_string_for_sd_end();
            flag = 2;
        break;
        case 2:
            if(key_num == 1){
                my_read_boy_book.old_index = my_read_boy_book.new_index;
                my_read_boy_book.new_index++;// = (my_read_boy_book.new_index + 1) % 2;
                my_read_boy_book.new_index = my_read_boy_book.new_index % 2;
                flag = 1;
            }
            if(key_num == 2){
                flag = 0;
            }
            
        break;
    
    }
}






void read_boy_book_main(char key_num){
    static char flag = 0;
    switch(flag){
        case 0:
            flag = 1;
        //break;
        case 1:
            read_boy_book_check(  key_num);//选择界面
            if(key_num == 2){
                if(my_read_boy_book.new_index == 1){
                    flag = 4;
                }else{
                    flag = 2;
                }
            }
        break;
        case 2:
            key_num = read_boy_book_show_Contents();//显示目录界面
            if(key_num == 2){
                flag = 3;
            }
        break;
        case 3:
            key_num = read_boy_book_show_book();//显示电子书界面
            if(key_num == 2){
                flag = 0;
            }
        break;
        case 4:
            key_num = read_boy_book_set();//设置界面
            if(key_num == 3){
                flag = 2;
            }
        break;    
    
    }

}
void read_boy_book_task(){
    char key_num = 0;
    
    readboy_key_init();
    while(1){
        read_boy_book_main(key_num);
        key_num = readboy_key_scan();//key_scan_auto();

        
    }

}
//#include "read_boy_base.h"

#define READ_BOY_KEY_1 3
#define READ_BOY_KEY_2 4
#define READ_BOY_KEY_3 5

#define KEY_DELY 2

void readboy_key_init(){
    gpio_init(READ_BOY_KEY_1);
    gpio_set_dir(READ_BOY_KEY_1, GPIO_IN);
	gpio_set_pulls(READ_BOY_KEY_1,1, 0); 
    
    gpio_init(READ_BOY_KEY_2);
    gpio_set_dir(READ_BOY_KEY_2, GPIO_IN);
	gpio_set_pulls(READ_BOY_KEY_2,1, 0); 
    
    gpio_init(READ_BOY_KEY_3);
    gpio_set_dir(READ_BOY_KEY_3, GPIO_IN);
	gpio_set_pulls(READ_BOY_KEY_3,1, 0); 

}
//gpio_get(Pin);
char read_key_1(){
    static char flag = 0;
    static int time = 0;
    switch(flag){
        case 0:
            time = 0;
            flag = 1;
        //break;
        case 1:
            if(gpio_get(READ_BOY_KEY_1) == 0){
                flag = 2;
                return 1;    
            }
        break;
        case 2:
            time++;
            if(time > KEY_DELY){
                flag = 3;
            }
        break;
        case 3:
            if(gpio_get(READ_BOY_KEY_1) == 1){
                flag = 0;
                //return 1;    
            }
        break;
    
    }
    return 0;
}

char read_key_2(){
    static char flag = 0;
    static int time = 0;
    switch(flag){
        case 0:
            time = 0;
            flag = 1;
        //break;
        case 1:
            if(gpio_get(READ_BOY_KEY_2) == 0){
                flag = 2;
                return 1;    
            }
        break;
        case 2:
            time++;
            if(time > KEY_DELY){
                flag = 3;
            }
        break;
        case 3:
            if(gpio_get(READ_BOY_KEY_2) == 1){
                flag = 0;
                //return 1;    
            }
        break;
    
    }
    return 0;
}

char read_key_3(){
    static char flag = 0;
    static int time = 0;
    switch(flag){
        case 0:
            time = 0;
            flag = 1;
        //break;
        case 1:
            if(gpio_get(READ_BOY_KEY_3) == 0){
                flag = 2;
                return 1;    
            }
        break;
        case 2:
            time++;
            if(time > KEY_DELY){
                flag = 3;
            }
        break;
        case 3:
            if(gpio_get(READ_BOY_KEY_3) == 1){
                flag = 0;
                //return 1;    
            }
        break;
    
    }
    return 0;
}

char readboy_key_scan(){
    if(read_key_3()){
        return 1;
    }
    if(read_key_2()){
        return 2;
    }
    if(read_key_1()){
        return 3;
    }
    return 0;
}





const uint8_t english[] ="Last summer, I had the opportunity to visit Paris, the city of lights and love. It was a trip I will never forget.\
Upon arriving in Paris, the first thing that struck me was the beauty of the city. The architecture was stunning, with historic buildings standing tall and proud. The Eiffel Tower, of course, was the highlight. Seeing it for the first time took my breath away. I spent hours just gazing at it, taking in its grandeur.\
One of the most memorable experiences was walking along the Seine River. The riverbanks were lined with charming cafes and bookshops. I stopped at a small cafe and enjoyed a cup of coffee while watching the world go by. The aroma of freshly brewed coffee and the sound of the river created a perfect atmosphere for relaxation.\
I also visited the Louvre Museum, which houses some of the world's most famous artworks. The Mona Lisa, in particular, was a must-see. The museum was vast, and it took me an entire day to explore just a fraction of its collections.\
Paris is also known for its delicious food. I indulged in croissants, baguettes, and macarons. Each bite was a burst of flavor that I will always remember.\
In the evenings, the city came alive with music and lights. I attended a jazz concert in a small club near Montmartre. The music was soulful, and the crowd was lively. It was the perfect way to end a day in Paris.\
This trip to Paris was a dream come true. The city's beauty, culture, and cuisine left a lasting impression on me. I hope to return one day and create more unforgettable memories";

const uint8_t daxue[] ="大学之道，在明明德，在亲民，在止于至善。\
　　知止而后有定，定而后能静，静而后能安，安而后能虑，虑而后能得。物有本末，事有终始。知所先后，则近道矣。\
　　古之欲明明德于天下者，先治其国；欲治其国者，先齐其家；欲齐其家者，先修其身；欲修其身者，先正其心；欲正其心者，先诚其意；欲诚其意者，先致其知。致知在格物。物格而后知至，知至而后意诚，意诚而后心正，心正而后身修，身修而后家齐，家齐而后国治，国治而后天下平。自天子以至于庶人，壹是皆以修身为本。\
　　其本乱而末治者，否矣。其所厚者薄，而其所薄者厚，未之有也。\
《康诰》曰：“克明德。”《太甲》曰：“顾諟天之明命。”《帝典》曰：“克明峻德。”皆自明也。\
汤之《盘铭》曰：“苟日新，日日新，又日新。”《康诰》曰：“作新民。”《诗》曰：“周虽旧邦，其命维新。”是故君子无所不用其极。\
《诗》云：“邦畿千里，维民所止。”《诗》云：“缗蛮黄鸟，止于丘隅。” 子曰：“于止，知其所止，可以人而不如鸟乎？”\
　　《诗》云：“穆穆文王，於缉熙敬止！”为人君，止于仁；为人臣，止于敬；为人子，止于孝；为人父，止于慈；与国人交，止于信。\
　　《诗》云：“瞻彼淇澳，菉竹猗猗。有匪君子，如切如磋，如琢如磨。瑟兮僴兮，赫兮喧兮。有匪君子，终不可谖兮！”“如切如磋”者，道学也。“如琢如磨”者，自修也。“瑟兮僴兮”者，恂栗也。“赫兮喧兮”者，威仪也。“有匪君子，终不可谖兮”者，道盛德至善，民之不能忘也。\
　　《诗》云：“於戏，前王不忘！”君子贤其贤而亲其亲，小人乐其乐而利其利，此以没世不忘也。\
子曰：“听讼，吾犹人也。必也使无讼乎！”无情者不得尽其辞。大畏民志，此谓知本。\
　　此谓知本，此谓知之至也。\
所谓致知在格物者，言欲致吾之知，在即物而穷其理也。盖人心之灵莫不有知，而天下之物莫不有理，唯于理有未穷，故其知有不尽也，是以《大学》始教，必使学者即凡天下之物，莫不因其已知之理而益穷之，以求至乎其极。至于用力之久，而一旦豁然贯通焉，则众物之表里精粗无不到，而吾心之全体大用无不明矣。此谓物格，此谓知之至也。\
所谓诚其意者，毋自欺也。如恶恶臭，如好好色，此之谓自谦。故君子必慎其独也。小人闲居为不善，无所不至，见君子而后厌然，掩其不善，而著其善。\
　　人之视己，如见其肺肝然，则何益矣。此谓诚于中，形于外，故君子必慎其独也。\
　　曾子曰：“十目所视，十手所指，其严乎！”富润屋，德润身，心广体胖，故君子必诚其意。\
所谓修身在正其心者，身有所忿懥，则不得其正，有所恐惧，则不得其正，有所好乐，则不得其正，有所忧患，则不得其正。心不在焉，视而不见，听而不闻，食而不知其味。此谓修身在正其心。\
所谓齐其家在修其身者，人之其所亲爱而辟焉，之其所贱恶而辟焉，之其所畏敬而辟焉，之其所哀矜而辟焉，之其所敖惰而辟焉。故好而知其恶，恶而知其美者，天下鲜矣。故谚有之曰：“人莫知其子之恶，莫知其苗之硕。”此谓身不修不可以齐其家。\
所谓治国必先齐其家者，其家不可教而能教人者，无之。故君子不出家而成教于国。孝者，所以事君也；悌者，所以事长也；慈者，所以使众也。《康诰》曰：“如保赤子。”心诚求之，虽不中，不远矣。未有学养子而后嫁者也。一家仁，一国兴仁；一家让，一国兴让；一人贪戾，一国作乱，其机如此。此谓一言偾事，一人定国。尧、舜帅天下以仁，而民从之。桀、纣帅天下以暴，而民从之。其所令反其所好，而民不从。是故君子有诸己而后求诸人，无诸己而后非诸人。所藏乎身不恕，而能喻诸人者，未之有也。故治国在齐其家。\
　　《诗》云：“桃之夭夭，其叶蓁蓁。之子于归，宜其家人。”宜其家人，而后可以教国人。\
　　《诗》云：“宜兄宜弟。”宜兄宜弟，而后可以教国人。\
　　《诗》云：“其仪不忒，正是四国。”其为父子兄弟足法，而后民法之也。此谓治国在齐其家。\
所谓平天下在治其国者，上老老而民兴孝，上长长而民兴悌，上恤孤而民不倍，是以君子有絜矩之道也。\
　　所恶于上，毋以使下，所恶于下，毋以事上；所恶于前，毋以先后；所恶于后，毋以从前；所恶于右，毋以交于左；所恶于左，毋以交于右；此之谓絜矩之道。\
　　《诗》云：“乐只君子，民之父母。”民之所好好之，民之所恶恶之，此之谓民之父母。《诗》云：“节彼南山，维石岩岩。赫赫师尹，民具尔瞻。”有国者不可以不慎，辟，则为天下僇矣。《诗》云：“殷之未丧师，克配上帝。仪监于殷，峻命不易。”道得众则得国，失众则失国。\
　　是故君子先慎乎德。有德此有人，有人此有土，有土此有财，有财此有用。\
　　德者本也，财者末也。外本内末，争民施夺。是故财聚则民散，财散则民聚。是故言悖而出者，亦悖而入；货悖而入者，亦悖而出。\
　　《康诰》曰：“惟命不于常。”道善则得之，不善则失之矣。\
　　《楚书》曰：“楚国无以为宝，惟善以为宝。”舅犯曰：“亡人无以为宝，仁亲以为宝。”\
　　《秦誓》曰：“若有一介臣，断断兮无他技，其心休休焉，其如有容焉。人之有技，若己有之；人之彦圣，其心好之，不啻若自其口出。寔能容之，以能保我子孙黎民，尚亦有利哉！人之有技，媢嫉以恶之；人之彦圣，而违之，俾不通：寔不能容，以不能保我子孙黎民，亦曰殆哉！”唯仁人放流之，迸诸四夷，不与同中国。此谓唯仁人为能爱人，能恶人。见贤而不能举，举而不能先，命也；见不善而不能退，退而不能远，过也。好人之所恶，恶人之所好，是谓拂人之性，灾必逮夫身。是故君子有大道，必忠信以得之，骄泰以失之。\
　　生财有大道，生之者众，食之者寡，为之者疾，用之者舒，则财恒足矣。仁者以财发身，不仁者以身发财。未有上好仁而下不好义者也，未有好义其事不终者也，未有府库财非其财者也。孟献子曰：“畜马乘不察于鸡豚，伐冰之家不畜牛羊，百乘之家不畜聚敛之臣。与其有聚敛之臣，宁有盗臣。”此谓国不以利为利，以义为利也。长国家而务财用者，必自小人矣。彼为善之，小人之使为国家，灾害并至。虽有善者，亦无如之何矣！\
此谓国不以利为利，以义为利也。";


